home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 2 / Gold Medal Software Volume 2 (Gold Medal) (1994).iso / windows / win31 / macsyma.arj / MACSDEMO.EXE / GENTRANC.OUT < prev    next >
Text File  |  1993-09-15  |  7KB  |  253 lines

  1.  
  2. (c1) (kill(a,b,c,m,u,u1,u2,v,x,y,z), 
  3.  disp(dpart(" DEMONSTRATION OF GENTRAN'S `C' CAPABILITY ")),
  4.  disp("TRANSLATION INTO `C' CODE"))$
  5. |$label(0,15,Times New Roman,)$box( DEMONSTRATION OF GENTRAN'S `C' CAPABILITY )
  6.  
  7. |$label(0,15,Times New Roman,)TRANSLATION INTO `C' CODE
  8.  
  9.  
  10. (c2) ( genfloat : true ,  gentranlang : 'c )$
  11.  
  12. (c3) gentran(  p : a*x^2 + b*x + c  )$
  13. p = a*pow(x,2)+b*x+c;
  14.  
  15. (c4) gentran(  m : matrix([u, 2*u^2], [-v^2, v])  )$
  16. {
  17.     m[1][1] = u;
  18.     m[1][2] = 2.0d0*pow(u,2);
  19.     m[2][1] = -pow(v,2);
  20.     m[2][2] = v;
  21. }
  22.  
  23. (c5) gentran(  for n:1 step 2 thru 9 do
  24.           p : p*f[n]  )$
  25. for (n = 1; !(n>9); n = n+2)
  26.     p = p*f[n];
  27.  
  28. (c6) gentran(  for n:2 next n*2 thru 500 do
  29.           s : s + n  )$
  30. for (n = 2.0d0; !(n>500.0d0); n = n*2.0d0)
  31.     s = s+n;
  32.  
  33. (c7) gentran(  while f(x) >= 0 do
  34.         x : x + 0.25  )$
  35. while (!!(f(x)>=0.0d0))
  36.     x = x+0.25;
  37.  
  38. (c8) gentran(  unless f(x) >= 0 do
  39.          x : x + 0.25  )$
  40. while (!(f(x)>=0.0d0))
  41.     x = x+0.25;
  42.  
  43. (c9) gentran(  if x > 0
  44.          then y : x  )$
  45. if (x>0.0d0)
  46.     y = x;
  47.  
  48. (c10) gentran(  if x > 0
  49.          then y : x
  50.          else y : -x  )$
  51. if (x>0.0d0)
  52.     y = x;
  53. else
  54.     y = -x;
  55.  
  56. (c11) gentran(  calcv(v, x, y, z)  )$
  57. calcv(v,x,y,z);
  58.  
  59. (c12) gentran(  (  u1 : x^2,
  60.          u2 : x - y  )  )$
  61. {
  62.     u1 = pow(x,2);
  63.     u2 = x-y;
  64. }
  65.  
  66. (c13) gentran(  block(  u1 : x^2,
  67.           u2 : x - y  )  )$
  68. {
  69.     u1 = pow(x,2);
  70.     u2 = x-y;
  71. }
  72.  
  73. (c14) gentran(  block(  f : 1,
  74.           i : 1,
  75.             loop,
  76.           f : f*i,
  77.           i : i + 1,
  78.           if i <= n then go(loop)  )  )$
  79. {
  80.     f = 1.0d0;
  81.     i = 1.0d0;
  82. loop:
  83.     f = f*i;
  84.     i = i+1.0d0;
  85.     if (i<=n)
  86.         goto loop;
  87. }
  88.  
  89. (c15) (disp("COMMENTS AND OTHER LITERAL STRINGS"))$
  90. |$label(0,15,Times New Roman,)COMMENTS AND OTHER LITERAL STRINGS
  91.  
  92.  
  93. (c16) gentran(  literal("/*", cr,
  94.                   " *  This is a `C' comment.", cr,
  95.                   " */", cr)  )$
  96. /*
  97.  *  This is a `C' comment.
  98.  */
  99.  
  100. (c17) /*                    EXPLICIT TYPE DECLARATIONS
  101. */
  102. gentran(  type(float, m(2,2)),
  103.           m : matrix([u, 2*u^2], [-v^2, v])  )$
  104. float m[3.0d0][3.0d0];
  105. {
  106.     m[1][1] = u;
  107.     m[1][2] = 2.0d0*pow(u,2);
  108.     m[2][1] = -pow(v,2);
  109.     m[2][2] = v;
  110. }
  111.  
  112. (c18) gentran(  fac(n) := block(type(int, fac, n),
  113.               f : 1,
  114.               for i:1 thru n do f : f*i,
  115.               type(int, f, i),
  116.               return(f))  )$
  117. int fac(n)
  118. int n;
  119. {
  120.     int f,i;
  121.     f = 1.0d0;
  122.     for (i = 1; !(i>n); i = i+1)
  123.         f = f*i;
  124.     return(f);
  125. }
  126.  
  127. (c19) (disp("TEMPLATE PROCESSING"))$
  128. |$label(0,15,Times New Roman,)TEMPLATE PROCESSING
  129.  
  130.  
  131. (c20) n : 3$
  132.  
  133. (c21) m : genmatrix(m, n, n);
  134. |$label(0,15,Times New Roman,$(d21$))$matrix(3,3,$sub(m,1$ina($, )$hinge()1),$sub(m,1$ina($, )$hinge()2),$sub(m,1$ina($, )$hinge()3),$sub(m,2$ina($, )$hinge()1),$sub(m,2$ina($, )$hinge()2),$sub(m,2$ina($, )$hinge()3),$sub(m,3$ina($, )$hinge()1),$sub(m,3$ina($, )$hinge()2),$sub(m,3$ina($, )$hinge()3))
  135.  
  136. (c22) /*
  137. **  --------  contents of file c-det-template.gentran:  --------
  138. **
  139. **  double det(m)
  140. **  <<
  141. **  gentran(  type( double, m(eval(n),eval(n)) )  );
  142. **  gendecs(false);
  143. **  >>
  144. **  {
  145. **  <<
  146. **  ccurrind : ccurrind + tablen;
  147. **  gentran(  literal(tab, "/*", cr,
  148. **                    tab, " *  Beginning of generated code...", cr,
  149. **              tab, " */", cr),
  150. **          det : eval( determinant(m) ),
  151. **            literal(tab, "/*", cr,
  152. **                    tab, " *  ...end of generated code", cr,
  153. **              tab, " */", cr)  );
  154. **  ccurrind : ccurrind - tablen;
  155. **  >>
  156. **  }
  157. **  >>
  158. **
  159. **  ----------------------------------------------------
  160. */
  161. gentranin("macsyma:demo;c-det-template.gentran");
  162. double det(m)
  163. double m[4.0d0][4.0d0];
  164.  
  165. {
  166.     /*
  167.      *  Beginning of generated code...
  168.      */
  169.     det = m[1][1]*(m[2][2]*m[3][3]-(1.0d0*m[2][3]*m[3][2]))-(1.0d0*m[1][2]*(m[2]
  170.      [1]*m[3][3]-(1.0d0*m[2][3]*m[3][1])))+m[1][3]*(m[2][1]*m[3][2]-(1.0d0*m[2][
  171.      2]*m[3][1]));
  172.     /*
  173.      *  ...end of generated code
  174.      */
  175.  
  176. }
  177. |$label(0,15,Times New Roman,$(d22$))true
  178.  
  179. (c23) /*
  180. **  --------  contents of file c-inv-template.gentran:  --------
  181. **
  182. **  inv(m, minv)
  183. **  <<
  184. **  gentran(  type( double, m(eval(n),eval(n)), minv(eval(n),eval(n)) )  );
  185. **  gendecs(false);
  186. **  >>
  187. **  {
  188. **  <<
  189. **  ccurrind : ccurrind + tablen;
  190. **  gentran(  literal(tab, "/*", cr,
  191. **                    tab, " *  Beginning of generated code...", cr,
  192. **              tab, " */", cr),
  193. **          minv : eval( m^^(-1) ),
  194. **          literal(tab, "/*", cr,
  195. **                    tab, " *  ...end of generated code", cr,
  196. **              tab, " */", cr)  );
  197. **  ccurrind : ccurrind - tablen;
  198. **  >>
  199. **  }
  200. **  >>
  201. **
  202. **  ----------------------------------------------------
  203. */
  204. gentranin("macsyma:demo;c-inv-template.gentran");
  205. inv(m, minv)
  206. double m[4.0d0][4.0d0],minv[4.0d0][4.0d0];
  207.  
  208. {
  209.     /*
  210.      *  Beginning of generated code...
  211.      */
  212.     {
  213.         minv[1][1] = (m[2][2]*m[3][3]-(1.0d0*m[2][3]*m[3][2]))*1.0d0/((m[1][1]*m
  214.          [2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
  215.          3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
  216.         minv[1][2] = -(1.0d0*(m[1][2]*m[3][3]-(1.0d0*m[1][3]*m[3][2]))*1.0d0/((m
  217.          [1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3
  218.          ])+m[1][3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m
  219.          [3][1]));
  220.         minv[1][3] = (m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*1.0d0/((m[1][1]*m
  221.          [2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
  222.          3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
  223.         minv[2][1] = -(1.0d0*(m[2][1]*m[3][3]-(1.0d0*m[2][3]*m[3][1]))*1.0d0/((m
  224.          [1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3
  225.          ])+m[1][3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m
  226.          [3][1]));
  227.         minv[2][2] = (m[1][1]*m[3][3]-(1.0d0*m[1][3]*m[3][1]))*1.0d0/((m[1][1]*m
  228.          [2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
  229.          3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
  230.         minv[2][3] = -(1.0d0*(m[1][1]*m[2][3]-(1.0d0*m[1][3]*m[2][1]))*1.0d0/((m
  231.          [1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3
  232.          ])+m[1][3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m
  233.          [3][1]));
  234.         minv[3][1] = (m[2][1]*m[3][2]-(1.0d0*m[2][2]*m[3][1]))*1.0d0/((m[1][1]*m
  235.          [2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
  236.          3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
  237.         minv[3][2] = -(1.0d0*(m[1][1]*m[3][2]-(1.0d0*m[1][2]*m[3][1]))*1.0d0/((m
  238.          [1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3
  239.          ])+m[1][3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m
  240.          [3][1]));
  241.         minv[3][3] = (m[1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*1.0d0/((m[1][1]*m
  242.          [2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
  243.          3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
  244.     }
  245.     /*
  246.      *  ...end of generated code
  247.      */
  248.  
  249. }
  250. |$label(0,15,Times New Roman,$(d23$))true
  251.  
  252. (c24) kill(m,n)$
  253.